plot_and_title <- card(
height="92%",
card_title(h1("Índice dos preços de placas de vídeo")),
plot_indexr()
)
bullet_point <- lapply(unavailable_chips, function(x) tags$li(x |> toupper()))
plot_info <- card(
card_title(h1("Informações")),
p("Disclaimer: Este índice está em fase experimental, pode não ser representativo dos preços e suas flutuações com precisão suficiente."),
p("Atualizamos o banco de dados todos os dias, com cada modelo específico de placa de vídeo sendo atualizado a cada 3 dias. Aqui no índice, os preços são agregados em conjuntos de 7 dias para uma maior consistência."),
p("Em verde vemos a média simples do melhor preço encontrado para cada chip gráfico acompanhado aqui, independentemente do modelo ou fabricante, este é nosso índice de preços (por enquanto)."),
p("Já em branco temos uma previsão do que esperamos para o valor do índice até o fim da próxima semana."),
hr(),
p("Alguns chips podem estar sendo desconsiderados, por disponibilidade excessivamente baixa ou preços excessivamente incoerentes:"),
!!!bullet_point
)
plot_and_title
plot_info
Disclaimer: Este índice está em fase experimental, pode não ser representativo dos preços e suas flutuações com precisão suficiente.
Atualizamos o banco de dados todos os dias, com cada modelo específico de placa de vídeo sendo atualizado a cada 3 dias. Aqui no índice, os preços são agregados em conjuntos de 7 dias para uma maior consistência.
Em verde vemos a média simples do melhor preço encontrado para cada chip gráfico acompanhado aqui, independentemente do modelo ou fabricante, este é nosso índice de preços (por enquanto).
Já em branco temos uma previsão do que esperamos para o valor do índice até o fim da próxima semana.
Alguns chips podem estar sendo desconsiderados, por disponibilidade excessivamente baixa ou preços excessivamente incoerentes:
trend_str <- index_data
trend <- cor(trend_str$Indice, trend_str$Semana)
if (is.na(trend)){
display_icon <- "ion-arrow-graph-up-right"
display_message <- "Não é possível medir por enquanto..."
display_color <- cores["fg"]
} else {
if (trend > 0) {
display_icon <- "ion-arrow-graph-up-right"
} else {
display_icon <- "ion-arrow-graph-down-right"
}
if (trend > .35) {
display_message <- "Preços subindo"
display_color <- cores["second"]
} else if (trend < -.35) {
display_message <- "Preços caindo"
display_color <- cores["third"]
} else {
display_message <- "Preços estáveis"
display_color <- cores["fg"]
}
}
valueBox(display_message, icon=display_icon, color=display_color)
Preços estáveis
valueBox(
paste(nrow(PRICES), "preços coletados"),
icon="ion-stats-bars", color=cores["fg"]
)
9977 preços coletados
update_date <- format(max(PRICES$LastUpdate), "%d de %B de %Y")
valueBox(update_date, icon="ion-android-calendar", color=cores["fg"])
15 de novembro de 2024
default_footnotes <- c(
"*Fonte de dados de desempenho na página 'SOBRE'",
"**Menor é melhor",
"Aviso: As recomendações ainda estão em fase experimental"
)
perf_fullpage <- function(title,
dataset,
perf_col,
perf_obs,
table_cols=c("FPS médio", "R$ por FPS**"),
footnote=default_footnote,
threshold=NULL,
low_threshold=NULL){
visual_elements <- plot_perf_scatter(
dataset, perf_col,
threshold=threshold,
low_threshold=low_threshold
)
#title=paste0("Preço x Performance ", perf_obs, "*")
card_right <- card(
card_header(h3(paste0("Preço x Performance ", perf_obs, "*"))),
navset_card_tab(
height="100%",
nav_panel("Gráfico", visual_elements[[2]]),
nav_panel("Recomendações", !!!visual_elements[1]),
nav_panel(
title=bs_icon("info-circle"),
!!!lapply(default_footnotes, function(x) p(x))
)
)
)
card_left <- card(
card_header(h3(paste("Ranking GPUs para", title, "*"))),
plot_perf_table(dataset, perf_col, table_cols=table_cols),
)
layout_column_wrap(width=1/2, height="100%", card_left, card_right)
}
perf_fullpage(
title="games em FHD medium",
dataset=price_raster_perf,
perf_col="fhd_medium",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
## Warning: The `theme_color` argument of `value_box()` is deprecated as of bslib 0.6.0.
## ℹ Please use the `theme` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em FHD ultra",
dataset=price_raster_perf,
perf_col="fhd_ultra",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em QHD ultra",
dataset=price_raster_perf,
perf_col="qhd_ultra",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em 4K ultra",
dataset=price_raster_perf,
perf_col="uhd_ultra",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em FHD medium com Ray Tracing",
dataset=price_rt_perf,
perf_col="fhd_ultra",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em FHD ultra com Ray Tracing",
dataset=price_rt_perf,
perf_col="fhd_medium",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em QHD ultra com Ray Tracing",
dataset=price_rt_perf,
perf_col="qhd_ultra",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="games em 4K ultra com Ray Tracing",
dataset=price_rt_perf,
perf_col="uhd_ultra",
perf_obs="(FPS médio)",
threshold=60,
low_threshold=30
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="Renderização 3D no Blender",
dataset=price_blender_perf,
perf_col="CUDA",
perf_obs="(pontuação no teste sintético)",
table_cols=c("Pontuação", "R$ por ponto")
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="Renderização 3D no Vray-5",
dataset=price_vray5_perf,
perf_col="score",
perf_obs="(pontuação no teste sintético)",
table_cols=c("Pontuação", "R$ por ponto")
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="Renderização de vídeos (Cinebench Redshift)",
dataset=price_videos_perf,
perf_col="redshift_score",
perf_obs="(1 milhão sobre o tempo de renderização em segundos)",
table_cols=c("Pontuação", "R$ por ponto")
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="Imagens geradas por minuto (Stable Diffusion)",
dataset=price_gen_ai_perf,
perf_col="stable_diffusion_512p_img_per_sec",
perf_obs="(imagens 512x512 geradas por minuto)",
table_cols=c("Imagens por minuto", "R$/imagem/minuto")
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
perf_fullpage(
title="Imagens geradas por minuto (Stable Diffusion)",
dataset=price_gen_ai_perf,
perf_col="stable_diffusion_768p_img_per_sec",
perf_obs="(imagens 768x768 geradas por minuto)",
table_cols=c("Imagens por minuto", "R$/imagem/minuto")
)
Opções para o orçamento mais apertado
Desempenho satisfatório, custo moderado
Total desempenho, poder sem limites!
*Fonte de dados de desempenho na página 'SOBRE'
**Menor é melhor
Aviso: As recomendações ainda estão em fase experimental
try
## function (expr, silent = FALSE, outFile = getOption("try.outFile",
## default = stderr()))
## {
## tryCatch(expr, error = function(e) {
## call <- conditionCall(e)
## if (!is.null(call)) {
## if (identical(call[[1L]], quote(doTryCatch)))
## call <- sys.call(-4L)
## dcall <- deparse(call, nlines = 1L)
## prefix <- paste("Error in", dcall, ": ")
## LONG <- 75L
## sm <- strsplit(conditionMessage(e), "\n")[[1L]]
## w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L],
## type = "w")
## if (is.na(w))
## w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],
## type = "b")
## if (w > LONG)
## prefix <- paste0(prefix, "\n ")
## }
## else prefix <- "Error : "
## msg <- paste0(prefix, conditionMessage(e), "\n")
## .Internal(seterrmessage(msg[1L]))
## if (!silent && isTRUE(getOption("show.error.messages"))) {
## cat(msg, file = outFile)
## .Internal(printDeferredWarnings())
## }
## invisible(structure(msg, class = "try-error", condition = e))
## })
## }
## <bytecode: 0x00000282c3d4c028>
## <environment: namespace:base>
opts <- list(
lengthMenu=list(c(17, -1), c("17", "All")),
pageLength=17,
language=list(url="https://cdn.datatables.net/plug-ins/1.10.25/i18n/Portuguese.json")
)
table_left <- DT::datatable(
price_drops(2),
style="bootstrap4", options=opts
)
table_right <- DT::datatable(
price_drops(4, TRUE), # change back to 5 later
style="bootstrap4", options=opts
)
card_left <- card(
card_header(card_title(h1("Quedas de preço durante a última semana"))),
table_left,
)
card_right <- card(
card_header(card_title(h1("Quedas de preço durante o último mês"))),
table_right,
)
layout_column_wrap(width=1/2, height="100%", card_left, card_right)
Ícones da logo e favicon: prettycon - Flaticon
Dados de performance em jogos (FPS médio): Tom’s Hardware
Pontuação de desempenho no Blender: Blender - Open Data
Pontuação de desempenho no Cinebench Redshift: CG Director
Pontuação de desempenho Chaos V-Ray: V-Ray 5 Benchmark
Geação de imagens com Stable Diffusion: Tom’s Hardware